package actividades;

import org.json.JSONObject;

import tratamientoDatos.UsuarioSingleton;
import tratamientoDatos.Verificador;
import world.trainer.R;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import comunicacionServidor.FuncionesJSON;

public class RegistroActivity extends Activity {

	private Editable nombre, peso, altura, edad, apellidos, email,
			contrasenya1, contrasenya2;
	private ProgressDialog dialog;
	private boolean correcto, datosCorrectos;
	private static String KEY_SUCCESS = "success";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.registro_activity);
		correcto = true;

		// Buscamos las referencias de los widgets
		final EditText valNombre = (EditText) findViewById(R.id.valNombre);
		final EditText valPeso = (EditText) findViewById(R.id.valPeso);
		final EditText valAltura = (EditText) findViewById(R.id.valAltura);
		final EditText valEdad = (EditText) findViewById(R.id.valEdad);
		final EditText valApellidos = (EditText) findViewById(R.id.valApellidos);
		final EditText valContrasenya1 = (EditText) findViewById(R.id.valContrasenya1);
		final EditText valContrasenya2 = (EditText) findViewById(R.id.valContrasenya2);
		final EditText valEmail = (EditText) findViewById(R.id.valEmail);
		dialog = ProgressDialog.show(this, "", "Cargando...", true);
		dialog.dismiss();

		// Tratamos el evento del boton guardar
		Button guardar = (Button) findViewById(R.id.botonGuardarConfiguracion);

		guardar.setOnClickListener(new OnClickListener() {

			public void onClick(View arg0) {
				nombre = valNombre.getText();
				peso = valPeso.getText();
				altura = valAltura.getText();
				edad = valEdad.getText();
				apellidos = valApellidos.getText();
				email = valEmail.getText();
				contrasenya1 = valContrasenya1.getText();
				contrasenya2 = valContrasenya2.getText();
				datosCorrectos = false;
				if (Verificador.esNombreApellidoValido(nombre.toString())) {
					if (Verificador.esNombreApellidoValido(apellidos.toString())) {
						if (Verificador.esPesoValido(peso.toString())) {
							if (Verificador.esAlturaValida(altura.toString())) {
								if (Verificador.esEdadValida(edad.toString())) {
									if (Verificador.esEmailValido(email
											.toString())) {
										if (Verificador
												.esContrasenyaValida(contrasenya1
														.toString())) {
											datosCorrectos = true;
										} else {
											Toast toast = Toast
													.makeText(
															getApplicationContext(),
															"Contrasenya invalida, minimo 3 caracteres",
															Toast.LENGTH_SHORT);
											toast.show();
										}
									} else {
										Toast toast = Toast.makeText(
												getApplicationContext(),
												"Email invalido",
												Toast.LENGTH_SHORT);
										toast.show();
									}
								} else {
									Toast toast = Toast
											.makeText(
													getApplicationContext(),
													"Edad invalida, debe ser un numero entero",
													Toast.LENGTH_SHORT);
									toast.show();
								}
							} else {
								Toast toast = Toast.makeText(
										getApplicationContext(),
										"Altura invalida, debe ser en cm",
										Toast.LENGTH_SHORT);
								toast.show();
							}
						} else {
							Toast toast = Toast.makeText(
									getApplicationContext(), "Peso invalido",
									Toast.LENGTH_SHORT);
							toast.show();
						}
					} else {
						Toast toast = Toast.makeText(getApplicationContext(),
								"Apellidos invalidos", Toast.LENGTH_SHORT);
						toast.show();
					}
				} else {
					Toast toast = Toast.makeText(getApplicationContext(),
							"Nombre invalido", Toast.LENGTH_SHORT);
					toast.show();
				}

				if (contrasenya1.toString().equals(contrasenya2.toString())
						&& datosCorrectos) {
					// Realizamos el registro en la base de datos

					dialog.show();
					correcto = true;
					new ClaseComunicacion().execute();
					

				} else {
					Toast toast = Toast
							.makeText(
									getApplicationContext(),
									"Las contrasenyas introducidas no son iguales o hay datos invalidos",
									Toast.LENGTH_SHORT);
					toast.show();
				}
			}
		});

		// Traramos el evento del boton cancelar
		Button cancelar = (Button) findViewById(R.id.botonCancelarConfiguracion);

		cancelar.setOnClickListener(new OnClickListener() {

			public void onClick(View arg0) {
				finish();
				Intent intent = new Intent(getApplicationContext(),
						LogueoActivity.class);
				Bundle bundle = new Bundle();
				bundle.putString("ACTIVITY", "cancelarRegistro");
				intent.putExtras(bundle);
				intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
				startActivity(intent);
			}

		});

	}

	public void onBackPressed() {

		finish();
		Intent intent = new Intent(getApplicationContext(),
				LogueoActivity.class);
		Bundle bundle = new Bundle();
		bundle.putString("ACTIVITY", "cancelarRegistro");
		intent.putExtras(bundle);
		intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
		startActivity(intent);

	}

	private class ClaseComunicacion extends AsyncTask<Void, Void, Void> {

		@Override
		protected Void doInBackground(Void... params) {
			FuncionesJSON userFunction = new FuncionesJSON();
			JSONObject json = new JSONObject();
			try {
				json = userFunction.registrarse(email.toString(),
						nombre.toString(), apellidos.toString(),
						contrasenya1.toString(),
						Integer.parseInt(edad.toString()),
						Float.parseFloat(peso.toString()),
						Integer.parseInt(altura.toString()));
				if (json.getString(KEY_SUCCESS) != null) {
					String res = json.getString(KEY_SUCCESS);
					if (Integer.parseInt(res) != 1)
						correcto = false;
				} else {
					correcto = false;
				}

			} catch (Exception e) {
				correcto = false;
			}
			return null;
		}

		@Override
		protected void onPostExecute(Void result) {
			dialog.dismiss();
			if (correcto) {
				UsuarioSingleton usuario = UsuarioSingleton.getInstance();
				usuario.setEmail(email.toString());
				usuario.setPeso(Float.parseFloat(peso.toString()));
				finish();
				Intent intent = new Intent(getApplicationContext(),
						MainActivity.class);
				Bundle bundle = new Bundle();
				bundle.putString("ACTIVITY", "registrarse");
				intent.putExtras(bundle);
				intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
				startActivity(intent);
			} else {
				Toast toast = Toast.makeText(getApplicationContext(),
						"No se ha podido realizar el registro",
						Toast.LENGTH_LONG);
				toast.show();
			}
		}

	}

	public void onPause() {

		finish();
		super.onPause();
	}
}
